<?php
/**
 O componente trabalha com uma coleção
 (que permite foreach e array access em cada item)
 e um array com as chaves primárias selecionadas.

 $this->lista = EscolaBairroTable::listaVincularEscolaBairro(
 $this->getUser()->getAttribute('co_municipio_fnde'),
 null
 );
 $this->arEscolasSelecionadas = isset($_POST['escola']) ? $_POST['escola'] : array('45258');

 Já no template, podemos usar o seguinte:

 SetUnset::create('escola', 'nu_seq_escola_lse')
 ->withCaptions('Escolas Disponíveis', 'Escolas Vinculados')
 ->withTitles('Relacionar esta escola', 'Desrelacionar esta escola')
 ->withListItem('nu_seq_escola_lse','Código')
 ->withListItem('no_escola','Nome da Escola','campo_vermelho') // campo_vermelho é o css personalizado do td
 ->withFooter('Clique nos itens para relacionar/desrelacionar.')
 ->withList($lista)
 ->setItens( $arEscolasSelecionadas )
 ->hideButtons()
 ->render();
 */

class SetUnset {

	protected $arListItens;
	protected $captionSet;
	protected $captionUnset;
	protected $titleSet;
	protected $titleUnset;
	protected $fieldName;
	protected $pkName;
	protected $footerText;
	protected $list;
	protected $arSetItens;
	protected $arFieldStyles = array();
	protected $showButtons = true;

	function __construct($name,$pkName) {
		$this->fieldName = $name;
		$this->pkName = $pkName;
	}

	/**
	 * @param $name o nome do par�metro que vai ser passado pela web, usado nos 'input hiddens'
	 * @param $pkName o nome do campo da chave prim�ria
	 * @return SetUnset
	 */
	static function create($name,$pkName) {
		return new SetUnset($name,$pkName);
	}

	/**
	 * @return SetUnset
	 */
	function withCaptions($set,$unset) {
		$this->captionSet = $set;
		$this->captionUnset = $unset;
		return $this;
	}

	/**
	 * @return SetUnset
	 */
	function hideButtons() {
		$this->showButtons = false;
		return $this;
	}

	/**
	 * @return SetUnset
	 */
	function withFooter($footerText) {
		$this->footerText = $footerText;
		return $this;
	}


	/**
	 * @return SetUnset
	 */
	function withListItem(
	$field,
	$headerTitle,
	$fieldTdStyle = null,
	$fieldCallback = null
	) {
		$this->arListItens[$field] = $headerTitle;
		$this->arFieldStyles[$field] = $fieldTdStyle;
		$this->arFieldCallbacks[$field] = $fieldTdStyle;
		return $this;
	}

	/**
	 * @return SetUnset
	 */
	function withTitles($set,$unset) {
		$this->titleSet = $set;
		$this->titleUnset = $unset;
		return $this;
	}

	/**
	 * @return SetUnset
	 */
	function withList($list) {
		$this->list = $list;
		return $this;
	}

	/**
	 * @return SetUnset
	 */
	function setItens($arSetItens) {
		$this->arSetItens = $arSetItens;
		return $this;
	}

	function rowIsSet($row) {
		return in_array($row[$this->pkName],$this->arSetItens);
	}

	function render() {
		$pluginsPath = sfConfig::get('sf_plugins_dir');
		$pluginsPath .=
    		DIRECTORY_SEPARATOR
    		.'FoxsisLibPlugin'
    		.DIRECTORY_SEPARATOR
    		.'lib'
    		.DIRECTORY_SEPARATOR
    		.'helper'
    		.DIRECTORY_SEPARATOR.
            'setunset_template.php';
		
		include $pluginsPath;
	}

	function getListHeadings() {
		return array_values($this->arListItens);
	}

	function getListFieldNames() {
		return array_keys($this->arListItens);
	}

	function genHtmlUnsetId($row) {
		return $this->fieldName.'_'.$row[$this->pkName].'_unset';
	}

	function genHtmlSetId($row) {
		return $this->fieldName.'_'.$row[$this->pkName].'_set';
	}

	function getTDClassDeclaration($fieldName) {
		if(isset($this->arFieldStyles[$fieldName])) {
			return 'class="'.$this->arFieldStyles[$fieldName].'"';
		}
	}


}
?>